package com.liunian.duplication2.nums.binarysearch;

public class SearchInsert35 {

	/**
	 给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。
	 请必须使用时间复杂度为 O(log n) 的算法。

	 示例 1:
	 输入: nums = [1,3,5,6], target = 5
	 输出: 2
	 // [1,3,5,5,5,5,6]

	 示例 2:
	 输入: nums = [1,3,5,6], target = 2
	 输出: 1
	 示例 3:

	 输入: nums = [1,3,5,6], target = 7
	 输出: 4
	 */
	public int searchInsert(int[] nums, int target) {
		int left = 0;
		int right = nums.length - 1;
		while (left <= right) {
			int mid = (left + right) / 2;
			if (nums[mid] < target) {
				left = mid + 1;
			} else if (nums[mid] > target) {
				right = mid - 1;
			} else {
				while (mid >= 0 && nums[mid] == target) {
					mid--;
				}
				return mid + 1;
			}
		}
		return left == right ? left + 1 : left;
	}

	public static void main(String[] args) {
		SearchInsert35 searchInsert35 = new SearchInsert35();
		System.out.println(searchInsert35.searchInsert(new int[] {1}, 1));
	}

}
